package org.budo.cmbc.direct.sdk.entity;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 不确定交易查询接口响应对象 00-成功(表示交易成功)，01-失败, 91-记录不存在, 99-不确定，
 * 02-受理成功（只适用于预付卡充值场景，不代表转账成功，在此状态下才有可能可以撤销，具体是否可撤销参考扩展字段中的CancleStatus字段）
 *
 * @author caotao
 */
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
public class MEQryTransStatusResponse extends AbstractCmbcDirectResponse {
    private static final long serialVersionUID = 1321733805008158072L;

    private String channelJnlNo;

    /**
     * 原交易状态 00-成功(表示交易成功)，01-失败,91-记录不存在,99-不确定，02-受理成功
     * （只适用于预付卡充值场景，不代表转账成功，在此状态下才有可能可以撤销，具体是否可撤销参考扩展字段中的CancleStatus字段）
     */
    private String status;

    /**
     * 扩展字段 SON格式，针对不同交易查询可能有不同内容。 {"TransDate":"20160930"} 扩展字段明细 例如： 原接口 原交易码 扩展字段
     * 1、如意宝申购 MELERybSubscribe TransDate 2、如意宝赎回到对公户 MELERybRedeem TransDate
     * 3、民生金买入和卖出 MEGDBuyOrSale TransDate 定活宝
     * TransDate，PropertyId，ProdNo，OrderAmount，OrderNo 4、预付卡
     * CancleStatus{该字段只会在交易状态为02-受理成功时才会有值，01-受理成功-不可撤销, 02-受理成功-可撤销, 03-受理成功-已撤销}
     * 5、入金到电子账户MELEBankInnnerTransfer Remittee(收款方) InnerTransferResult（入金成功-A
     * 入金失败-B 入金超时-C 申购成功-S 申购超时-T 申购失败-F） 其中入金超时-C时、申购超时-T时，status为99-不确定 6、出金到绑定卡
     * MELEBankRouterOutTransfer PayMent-付款方 （E-电子账户 R-如意宝 O-电子账户+如意宝）
     * 7、转账申请METransferRequest OrderId(订单号)
     */
    private String extData;

    /**
     * 失败原因
     *
     * 如果出金汇路为网银互联、大小额，并且出金交易失败，该字段才可能有值。
     */
    private String reason;

    public MEQryTransStatusResponse(String channelJnlNo, String responseJson) {
        super(channelJnlNo, responseJson);
        JSONObject json = JSON.parseObject(responseJson);
        this.channelJnlNo = json.getString("channelJnlNo");
        this.status = json.getString("Status");
        this.extData = json.getString("ExtData");
        this.reason = json.getString("Reason");

    }
}
